// api/vote.js - 加油相关API
const api = require('../utils/api.js')

/**
 * 获取候选人列表
 */
function getCandidateList(activityId, params = {}) {
  return api.get(`/activities/${activityId}/candidates`, params)
}

/**
 * 加油（支持匿名加油）
 * @param {number} activityId - 活动ID
 * @param {array} candidateIds - 候选人ID列表
 * @param {string} wxCode - 微信code（可选，用于匿名加油识别）
 */
function submitVote(activityId, candidateIds, wxCode = null) {
  const data = {
    candidate_ids: candidateIds
  }
  
  // 如果提供了微信code，添加到请求数据中
  if (wxCode) {
    data.wx_code = wxCode
  }
  
  return api.post(`/activities/${activityId}/votes`, data)
}

/**
 * 获取加油结果
 * @param {number} activityId - 活动ID
 * @param {string} wxCode - 微信code（可选，用于未登录用户查看自己的加油）
 */
function getVoteResults(activityId, wxCode = null) {
  const params = {}
  
  // 如果提供了微信code，添加到查询参数中
  if (wxCode) {
    params.wx_code = wxCode
  }
  
  return api.get(`/activities/${activityId}/votes/results`, params)
}

/**
 * 获取我的加油记录
 */
function getMyVotes(params = {}) {
  return api.get('/user/votes', params)
}

/**
 * 检查是否已加油
 */
function checkVoted(activityId) {
  return api.get(`/activities/${activityId}/votes/check`)
}

/**
 * 取消加油
 * @param {number} activityId - 活动ID
 * @param {number} candidateId - 候选人ID
 * @param {string} wxCode - 微信code（可选，用于匿名用户识别）
 */
function cancelVote(activityId, candidateId, wxCode = null) {
  const data = {
    candidate_id: parseInt(candidateId)  // 确保是整数
  }
  
  // 如果提供了微信code，添加到请求数据中
  if (wxCode) {
    data.wx_code = wxCode
  }
  
  console.log('🔍 取消加油API参数:', data)
  
  return api.post(`/activities/${activityId}/votes/cancel`, data)
}

/**
 * 获取加油统计
 */
function getVoteStatistics(activityId) {
  return api.get(`/activities/${activityId}/votes/statistics`)
}

/**
 * 导出加油数据
 */
function exportVotes(activityId) {
  return api.get(`/activities/${activityId}/votes/export`)
}

/**
 * 清理异常加油
 */
function cleanAbnormalVotes(activityId, userIds) {
  return api.post(`/activities/${activityId}/votes/clean`, {
    user_ids: userIds
  })
}

module.exports = {
  getCandidateList,
  submitVote,
  cancelVote,
  getVoteResults,
  getMyVotes,
  checkVoted,
  getVoteStatistics,
  exportVotes,
  cleanAbnormalVotes
}

